Row polymorphism
OCamlにもあるらしい
{ a :: A | r }と書けば、
{ a :: A}は許容する
{ a :: A, b :: B }も許容する
{ b :: B, c :: C}は許容しない
擬似コードをgpt-4.iconに書かせて理解しようと思ったけど、これ疑似TypeScriptじゃだめだなmrsekut.icon
実行時に型情報を見て挙動が変わるようなものを想定しないと理解がおかしくなる
参考
forall r. { foo :: Int, bar :: Int | r } -> IntのrがRow型
hsに入れるproposal